{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/sistema-de-leilao-ingles-holandes/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Criar um sistema de leilão inglês e holandês\",\n  \"description\": \"Nesse artigo iremos aprender a como criar um sistema de leilão inglês e holandês através de um contrato inteligente.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Avançado\", \"Aplicações\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"13/06/2022\",\n  \"modifiedAt\": \"20220613\",\n  \"suburl\": \"sistema-de-leilao-ingles-holandes/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender a como criar um sistema de leil\\xE3o ingl\\xEAs e holand\\xEAs atrav\\xE9s de um contrato inteligente.\"), mdx(\"h2\", {\n    \"id\": \"leilão-inglês-para-nft-english-auction\"\n  }, \"Leil\\xE3o Ingl\\xEAs para NFT (English Auction)\"), mdx(\"p\", null, \"Como funciona o leil\\xE3o?\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O vendedor da NFT deve implantar este contrato.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O leil\\xE3o tem dura\\xE7\\xE3o de 7 dias.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Os participantes podem dar seu lance depositando um valor em ETH maior que o lance atual.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Todos os licitantes podem retirar seu lance se n\\xE3o for o maior lance atual.\")), mdx(\"p\", null, \"Ap\\xF3s o leil\\xE3o terminar:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O licitante do maior lance torna-se o novo propriet\\xE1rio da NFT.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O vendedor recebe o valor de ETH do lance vencedor.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ninterface IERC721 {\\n    function safeTransferFrom(\\n        address from,\\n        address to,\\n        uint tokenId\\n    ) external;\\n\\n    function transferFrom(\\n        address,\\n        address,\\n        uint\\n    ) external;\\n}\\n\\ncontract EnglishAuction {\\n    event Start();\\n    event Bid(address indexed sender, uint amount);\\n    event Withdraw(address indexed bidder, uint amount);\\n    event End(address winner, uint amount);\\n\\n    IERC721 public nft;\\n    uint public nftId;\\n\\n    address payable public seller;\\n    uint public endAt;\\n    bool public started;\\n    bool public ended;\\n\\n    address public highestBidder;\\n    uint public highestBid;\\n    mapping(address => uint) public bids;\\n\\n    constructor(\\n        address _nft,\\n        uint _nftId,\\n        uint _startingBid\\n    ) {\\n        nft = IERC721(_nft);\\n        nftId = _nftId;\\n\\n        seller = payable(msg.sender);\\n        highestBid = _startingBid;\\n    }\\n\\n    function start() external {\\n        require(!started, \\\"iniciado\\\");\\n        require(msg.sender == seller, \\\"n\\xE3o \\xE9 o vendedor\\\");\\n\\n        nft.transferFrom(msg.sender, address(this), nftId);\\n        started = true;\\n        endAt = block.timestamp + 7 days;\\n\\n        emit Start();\\n    }\\n\\n    function bid() external payable {\\n        require(started, \\\"n\\xE3o iniciado\\\");\\n        require(block.timestamp < endAt, \\\"finalizado\\\");\\n        require(msg.value > highestBid, \\\"lance < maior lance\\\");\\n\\n        if (highestBidder != address(0)) {\\n            bids[highestBidder] += highestBid;\\n        }\\n\\n        highestBidder = msg.sender;\\n        highestBid = msg.value;\\n\\n        emit Bid(msg.sender, msg.value);\\n    }\\n\\n    function withdraw() external {\\n        uint bal = bids[msg.sender];\\n        bids[msg.sender] = 0;\\n        payable(msg.sender).transfer(bal);\\n\\n        emit Withdraw(msg.sender, bal);\\n    }\\n\\n    function end() external {\\n        require(started, \\\"n\\xE3o iniciado\\\");\\n        require(block.timestamp >= endAt, \\\"n\\xE3o finalizado\\\");\\n        require(!ended, \\\"finalizado\\\");\\n\\n        ended = true;\\n        if (highestBidder != address(0)) {\\n            nft.safeTransferFrom(address(this), highestBidder, nftId);\\n            seller.transfer(highestBid);\\n        } else {\\n            nft.safeTransferFrom(address(this), seller, nftId);\\n        }\\n\\n        emit End(highestBidder, highestBid);\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"leilão-holandês-para-nft-dutch-auction\"\n  }, \"Leil\\xE3o Holand\\xEAs para NFT (Dutch Auction)\"), mdx(\"p\", null, \"Como funciona o leil\\xE3o?\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O vendedor de NFT implanta este contrato definindo um pre\\xE7o inicial para o NFT.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O leil\\xE3o tem dura\\xE7\\xE3o de 7 dias.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O pre\\xE7o do NFT diminui ao longo do tempo.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Os participantes podem comprar depositando um valor ETH maior que o pre\\xE7o atual calculado pelo contrato inteligente.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"O leil\\xE3o termina quando um comprador realiza a compra do NFT.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ninterface IERC721 {\\n    function transferFrom(\\n        address _from,\\n        address _to,\\n        uint _nftId\\n    ) external;\\n}\\n\\ncontract DutchAuction {\\n    uint private constant DURATION = 7 days;\\n\\n    IERC721 public immutable nft;\\n    uint public immutable nftId;\\n\\n    address payable public immutable seller;\\n    uint public immutable startingPrice;\\n    uint public immutable startAt;\\n    uint public immutable expiresAt;\\n    uint public immutable discountRate;\\n\\n    constructor(\\n        uint _startingPrice,\\n        uint _discountRate,\\n        address _nft,\\n        uint _nftId\\n    ) {\\n        seller = payable(msg.sender);\\n        startingPrice = _startingPrice;\\n        startAt = block.timestamp;\\n        expiresAt = block.timestamp + DURATION;\\n        discountRate = _discountRate;\\n\\n        require(_startingPrice >= _discountRate * DURATION, \\\"pre\\xE7o inicial < m\\xEDnimo\\\");\\n\\n        nft = IERC721(_nft);\\n        nftId = _nftId;\\n    }\\n\\n    function getPrice() public view returns (uint) {\\n        uint timeElapsed = block.timestamp - startAt;\\n        uint discount = discountRate * timeElapsed;\\n        return startingPrice - discount;\\n    }\\n\\n    function buy() external payable {\\n        require(block.timestamp < expiresAt, \\\"leil\\xE3o expirado\\\");\\n\\n        uint price = getPrice();\\n        require(msg.value >= price, \\\"lance < pre\\xE7o\\\");\\n\\n        nft.transferFrom(seller, msg.sender, nftId);\\n        uint refund = msg.value - price;\\n        if (refund > 0) {\\n            payable(msg.sender).transfer(refund);\\n        }\\n        selfdestruct(seller);\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"p\", null, \"Este sistema de leil\\xF5es pode ser implantado para uma plataforma de leil\\xF5es de NFT, ap\\xF3s realizar as altera\\xE7\\xF5es necess\\xE1rias para que o contrato suporte m\\xFAltiplas ofertas de NFT e lances.\"), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Criar um sistema de leilão inglês e holandês","description":"Nesse artigo iremos aprender a como criar um sistema de leilão inglês e holandês através de um contrato inteligente.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEEAgP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAGyjqxmg//EABoQAAICAwAAAAAAAAAAAAAAAAECERIEECH/2gAIAQEAAQUCUxkPcKs1Kie6/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHRABAAIBBQEAAAAAAAAAAAAAAQARAgMQEjFRYf/aAAgBAQAGPwJHUXLK6PIpeXyF9zkUPs72/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARIRAxQfH/2gAIAQEAAT8hspCj0Ir7DxlxJDVNJiicabE+fH//2gAMAwEAAgADAAAAEPDP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHxABAQABAgcAAAAAAAAAAAAAAREAIYEQMUFhcZHR/9oACAEBAAE/EBq+BpzQTo/O+QZ+k17YxBgpKO2mE5WQKjztlBI2cP/Z","aspectRatio":1.5151515151515151,"src":"/static/1c2c751b1a74a4cfb71bcbe18f7802cf/0cb3d/capa.jpg","srcSet":"/static/1c2c751b1a74a4cfb71bcbe18f7802cf/f836f/capa.jpg 200w,\n/static/1c2c751b1a74a4cfb71bcbe18f7802cf/2244e/capa.jpg 400w,\n/static/1c2c751b1a74a4cfb71bcbe18f7802cf/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Avançado","Aplicações"],"author":["Matheus"],"suburl":"sistema-de-leilao-ingles-holandes/","publishedAt":"13/06/2022","modifiedAt":"20220613"},"tableOfContents":{"items":[{"url":"#leilão-inglês-para-nft-english-auction","title":"Leilão Inglês para NFT (English Auction)"},{"url":"#leilão-holandês-para-nft-dutch-auction","title":"Leilão Holandês para NFT (Dutch Auction)","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"sistema-de-leilao-ingles-holandes/","postTopics":["Avançado","Aplicações"],"publishedAt":"13/06/2022","prevArticle":{"title":"Criar um Canal de pagamento bidirecional","layout":"BlogPage","suburl":"canal-de-pagamento-bidirecional/","author":["Matheus"],"tags":["Avançado","Aplicações"],"publishedAt":"11/06/2022","modifiedAt":"20220611"},"nextArticle":{"title":"Criar um sistema de financiamento coletivo","layout":"BlogPage","suburl":"financiamento-coletivo-crowd-fund/","author":["Matheus"],"tags":["Avançado","Aplicações"],"publishedAt":"14/06/2022","modifiedAt":"20220614"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}